﻿/// <reference path="../jquery-1.7.1.js" />



$(document).ready(function () {

    function showQuestionDialog(headerText, bodyText, link) {
        $('#modalHeader').html(headerText);
        $('#modalBody p').html(bodyText);
        $('#modalBtnYes').attr('href', link);
        $('#QModal').modal('toggle');
    }

    $('#closeUpdateModal').click(function () {
        $('#updateModal').modal('hide')
    })
})


function setStatus(message, isFinish) {
    $('img#img-loader').hide();
    var img = '';
    if (isFinish) {
        img = '<img src="../../Content/img/galochka.png" width="15px" height="15px"/>';
    }
    else {
        var img = '<img src="../../Content/img/ajax-loader.gif" id="img-loader"/>';
    }
    $('#updateInfo').append('<p>' + message + ' ' + img + '</p>');
}

function runBuild(id, path, isGetFile, version) {
    setStatus('Компиляция исходных файлов...');

    $.ajax({
        url: "/ServerObject/BuildSources",
        data: { idApp: id, csProjFileName: path },
        type: "GET",
        beforeSend: function () {
        },
        success: function (data) {
            if (data.state == "error") {
                alert('Произошла ошибка: ' + data.message);
                return;
            }
            else {
                if (isGetFile) {
                    $.ajax({
                        url: "/ServerObject/GetFile",
                        type: "GET",
                        data: { idApp: id },
                        beforeSend: function () {
                        },
                        success: function (data) {
                            if (!data) {
                                alert('Произошла ошибка при скачивании файла');
                                return;
                            }
                            else {
                                setStatus('Ссылка на скачивание получена...', true);
                            }
                        }
                    })
                }
                else {
                    setStatus('Компиляция успешно завершена...');
                    setStatus('Начало развертывания...');
                    $.ajax({
                        url: "/ServerObject/DeployApplication",
                        type: "GET",
                        data: { idApp: id, version: version },
                        beforeSend: function () {
                        },
                        success: function (data) {
                            if (data.state == "error") {
                                alert('Произошла ошибка: ' + data.message);
                                return;
                            }
                            else {
                                setStatus('Развертывание успешно завершено...', true);
                            }
                        }
                    })
                }
            }
        },
        error: function (error) {
            alert('Произошла ошибка: ' + error);
        }
    })
}
var iterCheckOut = 0;

function updateApplication(e, isGetFile) {
    var id = $(e.currentTarget).attr('idapp');
    if (!confirm('Вы уверены, что хотите обновить данное приложение?')) {
        return;
    }
    var version = prompt('Новая версия приложения: ');
    if (!version) {
        alert('Необходимо ввести номер версии');
        return;
    }
    $('#updateModal').modal('toggle');
    $('#updateInfo p').html('');

    setStatus('Выкачивание исходных файлов...');

    $('#csProjFileChoos').html('');
    $('#csProjFileChoos').dialog({
        autoOpen: false,
        height: 345,
        width: 330,
        show: { effect: "toggle", duration: 800 },
        buttons: {
            "Применить": function () {
                var path = $('input[type="checkbox"]#check:checked').parent('div').attr('csProjPath');
                $('#csProjFileChoos').parent().hide('highlight');
                $('#csProjFileChoos').html('');
                setStatus('Главный файл выбран...');
                runBuild(id, path, isGetFile, version);
            }
        },
        zIndex: 100000
    });

    var requestCallback = new MyRequestsCompleted({
        numRequest: 2
    });

    //$.when(
    $.ajax({
        url: "/ServerObject/SvnChekout",
        type: "GET",
        data: { idApp: id },
        beforeSend: function () {
        },
        success: function (data) {
            if (data.state == "error") {
                alert(data.message);
                return;
                //if (iterCheckOut > 2) {
                //    alert('Произошла ошибка: ' + data.message);
                //    return;
                //}
                //iterCheckOut += 1;
                //updateApplication(e, isGetFile);
            }

            $.ajax({
                url: "/ServerObject/CheckIsCsProjFileNotEmpty",
                type: "GET",
                data: { idApp: id },
                beforeSend: function () {
                },
                success: function (data) {
                    if (data) {
                        setStatus('Выбор главного файла для компиляции проекта...');
                        $('#csProjFileChoos').html(data);
                        $('#csProjFileChoos').dialog('open');
                    } else {
                        setStatus('Главный файл для компиляции задан...');
                        //requestCallback.addCallbackToQueue(true, function () {
                        //    alert('Im the second callback');
                        //});
                        runBuild(id, null, isGetFile, version);
                    }
                },
                ajaxError: function () {
                }
            })


            //requestCallback.addCallbackToQueue(true, function () {
            //    alert('Im the first callback');
            //});
            //iterCheckOut = 0;
        },
        ajaxError: function () {
        }
    });
        
    //).then(function () {
    //});

}

var MyRequestsCompleted = (function () {
    var numRequestToComplete, requestsCompleted, callBacks, singleCallBack;

    return function (options) {
        if (!options) options = {};

        numRequestToComplete = options.numRequest || 0;
        requestsCompleted = options.requestsCompleted || 0;
        callBacks = [];
        var fireCallbacks = function () {
            alert("we're all complete");
            for (var i = 0; i < callBacks.length; i++) callBacks[i]();
        };
        if (options.singleCallback) callBacks.push(options.singleCallback);

        this.addCallbackToQueue = function (isComplete, callback) {
            if (isComplete) requestsCompleted++;
            if (callback) callBacks.push(callback);
            if (requestsCompleted == numRequestToComplete) fireCallbacks();
        };
        this.requestComplete = function (isComplete) {
            if (isComplete) requestsCompleted++;
            if (requestsCompleted == numRequestToComplete) fireCallbacks();
        };
        this.setCallback = function (callback) {
            callBacks.push(callBack);
        };
    };
})();

function appDblClick(e) {
    var idApp = $(e.currentTarget).attr("idapp");
    if (idApp == 'undefined' || idApp == 0) {
        alert("Неверный идентификатор объекта");
        return;
    }
    // alert(idApp);
    var url = "/ServerObject/ShowObject/" + idApp;
    if (window.showModalDialog) {
        window.showModalDialog(url, "Операции с объектом",
        "dialogWidth:715px;dialogHeight:550px");
    }
}